home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / include / pwdb / _pwdb_macros.h next >
C/C++ Source or Header  |  2005-10-13  |  3KB  |  132 lines

  1. #ifndef PWDB_MACROS_H
  2. #define PWDB_MACROS_H
  3.  
  4. /*
  5.  * All kind of macros used by PWDB, but usable in some other
  6.  * programs too.
  7.  * Organized by Cristian Gafton <gafton@sorosis.ro>
  8.  */
  9.  
  10. /* Good policy to strike out passwords with some characters not just
  11.    free the memory */
  12.  
  13. #define _pwdb_overwrite(x) \
  14. { \
  15.      register char *__xx__; \
  16.      if ((__xx__=x)) \
  17.           while (*__xx__) \
  18.                *__xx__++ = '\0'; \
  19. }
  20.  
  21. /*
  22.  * Don't just free it, forget it too.
  23.  */
  24.  
  25. #define _pwdb_drop(X) \
  26. if (X) { \
  27.     free(X); \
  28.     X=NULL; \
  29. }
  30.  
  31. /* some debugging code */
  32.  
  33. #ifdef D
  34. #undef D
  35. #endif /* D */
  36.  
  37. #ifdef DEBUG
  38.  
  39. /*
  40.  * This provides the necessary function to do debugging in PWDB.
  41.  * Cristian Gafton <gafton@sorosis.ro>
  42.  */
  43.  
  44. #include <stdio.h>
  45. #include <sys/types.h>
  46. #include <stdarg.h>
  47. #include <stdlib.h>
  48. #include <errno.h>
  49.  
  50. /*
  51.  * This is for debugging purposes ONLY. DO NOT use on live systems !!!
  52.  * You have been warned :-) - CG
  53.  *
  54.  * to get automated debugging to the log file, it must be created manually.
  55.  * _PWDB_LOGFILE must exist, mode 666
  56.  */
  57.  
  58. #ifndef _PWDB_LOGFILE
  59. #define _PWDB_LOGFILE "/tmp/pwdb-debug.log"
  60. #endif
  61.  
  62. static void _pwdb_output_debug_info(const char *file, const char *fn
  63.                    , const int line)
  64. {
  65.     FILE *logfile;
  66.     int must_close = 1;
  67.     
  68.     if (!(logfile = fopen(_PWDB_LOGFILE,"a"))) {
  69.         logfile = stderr;
  70.         must_close = 0;
  71.     }
  72.     fprintf(logfile,"[%s:%s(%d)] ",file, fn, line);
  73.     if (must_close) {
  74.         fflush(logfile);
  75.         fclose(logfile);
  76.     }
  77. }
  78.  
  79. static void _pwdb_output_xdebug_info(const char *last_fn, const char *last_call
  80.                     , const int last_line
  81.                     , const char *last_file)
  82. {
  83.     FILE *logfile;
  84.     int must_close = 1;
  85.     
  86.     if (!(logfile = fopen(_PWDB_LOGFILE,"a"))) {
  87.         logfile = stderr;
  88.         must_close = 0;
  89.     }
  90.     fprintf(logfile, "[%s:%s(%d)->%s()] ",
  91.         last_file, last_call, last_line, last_fn);
  92.     if (must_close) {
  93.         fflush(logfile);
  94.         fclose(logfile);
  95.     }
  96. }
  97.  
  98. static void _pwdb_output_debug(const char *format, ...)
  99. {
  100.     va_list args;
  101.     FILE *logfile;
  102.     int must_close = 1;
  103.     
  104.     va_start(args, format);
  105.  
  106.     if (!(logfile = fopen(_PWDB_LOGFILE,"a"))) {
  107.         logfile = stderr;
  108.         must_close = 0;
  109.     }
  110.     vfprintf(logfile, format, args);
  111.     fprintf(logfile, "\n");
  112.     if (must_close) {
  113.         fflush(logfile);
  114.         fclose(logfile);
  115.     }
  116.  
  117.     va_end(args);
  118. }
  119. #undef _PWDB_LOGFILE
  120. #define D(x) { \
  121.     _pwdb_output_debug_info(__FILE__, __FUNCTION__, __LINE__); \
  122.     _pwdb_output_debug x ; \
  123.  
  124. #else
  125.  
  126. #define D(x)
  127.  
  128. #endif /* DEBUG */
  129.  
  130. #endif  /* PWDB_MACROS_H */
  131.